import com.troyworks.datastructures.Array2;
/**
 * @author Troy Gardner
 */
interface com.troyworks.datastructures.IArray {
	///////////ARRAY ///////////////////////
	//public function Array(value:Object);
	public function join(delimiter:String):String;
	public function pop():Object;
	public function push(value:Object):Number;
	public function reverse():Void;
	public function shift():Object;
	public function toString():String;
	public function unshift(value:Object):Number;
	
	/////// ARRAY1 Overridden ////////////////
	public function slice(startIndex:Number, endIndex:Number):Array2;
	public function sort(compareFunction:Object, options: Number):Array2; // 'compare' might be omitted so untyped. 'options' is optional.
	public function sortOn(fieldName:Object, options: Object):Array2; // 'fieldName' is a String, or an Array of String. 'options' is optional.
	public function splice(startIndex:Number, deleteCount:Number, value:Object):Array2;
	////////// ARRAY2 ////////////////////
	public function appendArray(ary : Array, to:Number):Void;
	public function swapPlaces(objA : Object, objB : Object) : Array2;
	public function reorderPlaces(object : Array, desiredPlaces : Array) : Array2;
	public function shiftFromTo(idxFrom : Number, idxTo : Number) : Array2;
	public function shiftTowardsStart(idxFrom : Number, positions : Number) : Array2;
	public function shiftTowardsEnd(idxFrom : Number, positions : Number) : Array2;
	public function insertAt(idx : Number, values : Object) : Array2;
	public function removeAt(pos : Number, positions:Number) : Array2;
	public function removeAll():Void;
	public function remove(aValue_obj : Object) : Number;
	public function getFilteredSet(from : Number, to : Number, aThatsNot : Array, aThatsIsOneOf : Array) : Array2;
	public function getFilteredRandomElement(from : Number, to : Number, aThatsNot : Array, aThatsIsOneOf : Array) : Object;
	public function getRandomElement(from : Number, to : Number, aThatsNot : Array, aThatsIsOneOf : Array) : Object;
	public function getFirstElement() : Object;
	public function getLastElement() : Object;
	public function isEmpty() : Boolean;
	public function shuffle(len : Number) : Array2;
	public function isWithinIndexBounds(num : Number) : Boolean;
	public function snapToClosest(num : Number) : Number;
	public function concat(value:Object) : Array2;
	public function clone() : Array2;
	public function getFirstIndexOf(aValue_obj : Object, from : Number, to : Number) : Number;
	public function getLastIndexOf(aValue_obj : Object, from : Number, to : Number) : Number;
	public function contains(aValue_obj : Object) : Boolean;
	public function isBefore(aBeforeVaL : Object, aFromVal : Object, rng : Number) : Boolean;
	public function isAfter(aAfterVaL : Object, aFromVal : Object, rng : Number) : Boolean;	
}